feat(python-lsp)!: replace the old pylsp with zuban and ruff#1528
feat(python-lsp)!: replace the old pylsp with zuban and ruff#1528charliie-dev merged 12 commits intoayamir:mainfrom Cloud0310:main
Conversation
See [previous PR](#1489) for details
|
does |
As mentioned in #1528, keep the ruff config align with previous config. This includes: 1. set default line length to 88, as `black`'s default behavior 2. align with previous linter config As for the pyrefly lsp config, I guess the default is good to go.
Thanks for your kindly remind, I check up the previous config for pylsp, and pyrefly config docs, and ruff config doc. |
|
Another thing is that, I suggest we should ask other maintainers for their opinion on this PR about whether its time to switch and what can we improve about lsp/linter/formatter config. |
|
Maybe I can't review it now.
|
|
Now there's another option for Python LSP, Zuban claims to support more lsp features, and look promising. We should take one that into consideration as well. |
|
I saw it as well, but it's kinda late (UTC+8 1a.m.) now, tomorrow I will try to test it. |
|
I guess for my use case for scripting in python with types, the mentioned refactor feature is working properly and all other things are working as intended. So I guess its ready for review and test. Another thing is the new zuban lsp, should we consider it instead of pyrefly? ref: @misumisumi @charliie-dev |
|
Found this amazing test set from python/typing, I will try to re-test, and then I guess we can choose a base on this test. |
|
results.html |
can we add ty to the list? |
Guess nothing is working on that one. Even basic array type infer. |
|
then +1 for zuban, lets gooo |
|
I also think it would be better to choose zuban now. P.S. |
As for the personal project problem, the current solution python-lsp is based on jedi as well, so I guess the community solution is absolutely fine. Personally, I would like the solution of using zuban for now. In the long term, if there's better solution with python lsp, I guess it wouldn't be a problem to switch to it. P.S. I happen to know one of the contributors of zuban and pyrefly, @asukaminato0721. The situation about all mentioned lsp inplementations is as this blog (Simplified Chinese) suggests. |
As [PR 1528] discussion suggests, zuban is more implemented and has less memory footprint.
|
So maybe we could merge this? @charliie-dev @misumisumi |
…_list` Signed-off-by: Charles Chiu <mail@charliie.dev>
charliie-dev
left a comment
There was a problem hiding this comment.
just tested on my private python repo, seems right lol
LGTM
|
imo, both are excellent choices. Zuban did very well in the standard. Pyrefly just released a beta version and will be the CI tool for PyTorch. d = {"2": 2}
if d.get("1") is None:
raise
x = d.get("1")Now only Pyrefly can infer that x is int. facebook/pyrefly@70b058e |
* feat: use vim.env and vim.uv for env and cwd access (#1507) Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> * fix: LSP start logic (#1504) * Revert "fix: remove manual `LspStart`, close #1478. (#1479)" This reverts commit 7dab4b9. * Revert "fixup(#1466): load lsp config with proper event. (#1472)" This reverts commit 53eeeec. * fix: LSP start logic This should acc fix #1472 and #1479 cuz iirc the root cause was that lspconfig changed how `LspStart` works. Now it only starts one _specific_ server (passed via the first argument), instead of starting all matching servers automatically. So we gotta manually start all the servers that match the current filetype instead. Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> * fix: redundant return Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> * fix: invoke `:LspStart` correctly Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> --------- Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> Co-authored-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> * feat(mason)!: migrate to v2.x (#1502) * feat(mason)!: migrate to v2.x Just wrapped up going thru all the changes in mason 2.x (and nvim 0.11 too)! This should be a follow up to #1466 and (hopefully) fix all the issues related to the updated LSP API (like servers not spawning and other weirdness) and works together w #1496. Acc the main issue was that some mason package names don't match their names in lspconfig, so just using `lsp_deps` directly works for most, but breaks a bunch of others (tldr: that mismatch is what was causing all the edge cases and broken behavior). I also went ahead and enabled `automatic_installation` because why not lol means we don't have to manually call `vim.lsp.enable()` for everything, which might save a tiny bit of perf too. Didn't test this super thoroughly yet so pls lmk if anything's still broken! Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> * fixup! feat(mason)!: migrate to v2.x * fixup! feat(mason)!: migrate to v2.x * fixup! feat(mason)!: migrate to v2.x * fix: LSP start logic (#1496) * Revert "fix: remove manual `LspStart`, close #1478. (#1479)" This reverts commit 7dab4b9. * Revert "fixup(#1466): load lsp config with proper event. (#1472)" This reverts commit 53eeeec. * fix: LSP start logic This should acc fix #1472 and #1479 cuz iirc the root cause was that lspconfig changed how `LspStart` works. Now it only starts one _specific_ server (passed via the first argument), instead of starting all matching servers automatically. So we gotta manually start all the servers that match the current filetype instead. Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> --------- Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> * fix: unresolved nvim_lsp * feat(lsp): unify language server setup Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> --------- Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> Co-authored-by: ayamir <lgt986452565@gmail.com> * chore(lockfile): auto update lazy-lock.json * refactor(tool): simplify fzf-lua usage and improve lazy loading (#1506) * refactor(tool): simplify fzf-lua usage and improve lazy loading Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> * feat: minor optimizations Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> * style: remove reduntant short circuit logic. --------- Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> Co-authored-by: ayamir <lgt986452565@gmail.com> * fix: avoid require nil. * chore(lockfile): auto update lazy-lock.json * fix(event): fix "Autojump to last edit" event (#1509) * chore(lockfile): auto update lazy-lock.json * chore(gh_act): update components (#1510) * chore(lockfile): auto update lazy-lock.json * fix: abnormal window behavior when use fzf (#1511) * chore(lockfile): auto update lazy-lock.json * fix(project_nvim): rename module name to project (#1514) * chore(lockfile): auto update lazy-lock.json * fix: adapt codecompanion newest api * chore(lockfile): auto update lazy-lock.json * fix: use realpath of vim related path (#1516) * chore(lockfile): auto update flake.lock * fix: only use realpath for vim_path (#1522) * chore(lockfile): auto update lazy-lock.json * fix: typos in comment and install message (#1525) * chore(lockfile): auto update lazy-lock.json * chore(lockfile): auto update flake.lock * fix: temporarily disable project.nvim 'lsp' attach mode (#1529) See [DrKJeff16/project.nvim#24](DrKJeff16/project.nvim#24) for details * chore(lockfile): auto update lazy-lock.json * fix(lspconfig): remove deprecated legacy framework of lspconfig (#1530) Co-authored-by: misumisumi <s.kobayashi@misumi-sumi.com> * fix(#1520): disable swapfile (#1531) * chore(lockfile): auto update lazy-lock.json * perf(ci): update ci config (#1534) * perf(ci): make bot commit verified and add `dependabot` for ci component autoupdate * chore(doc): update username from `CharlesChiuGit` to `charliie-dev` * chore(lockfile): auto update lazy-lock.json * fix(lockfile): update flake.lock to make ci works (#1535) * chore(ci): set schedule to every 2 week (#1536) * chore(lockfile): auto update lazy-lock.json * chore(lockfile): auto update flake.lock * fix(project): re-enable LSP detection (#1539) Signed-off-by: Guennadi Maximov C <g.maxc.fox@protonmail.com> * chore(lockfile): auto update lazy-lock.json * feat(python-lsp)!: replace the old pylsp with zuban and ruff (#1528) * chore(lockfile): auto update lazy-lock.json * chore(ci.deps): bump actions/checkout in the actions-dependencies group (#1542) Bumps the actions-dependencies group with 1 update: [actions/checkout](https://github.com/actions/checkout). Updates `actions/checkout` from 5 to 6 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v5...v6) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions-dependencies ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(lockfile): auto update lazy-lock.json * chore: pin codecompanion in case breaking change temprarily (#1543) details: olimorris/codecompanion.nvim#2439 Co-authored-by: liuguangtian.1024 <liuguangtian.1024@bytedance.com> * chore(lockfile): auto update flake.lock * chore(lockfile): auto update lazy-lock.json * [migration] set nvim-treesitter to main branch, close #1541 (#1544) * feat!(plugins.editor): set `nvim-treesitter` and `nvim-treesitter-textobjects` branch to `main` * fix(lockfile): manually remove lockfile to make branch-changing effective * feat!(configs.editor): migrate `treesitter` and `ts-textobjects` config * feat!(keymap.editor): move `ts-textobjects`' keymap here --------- Signed-off-by: Charles Chiu <mail@charliie.dev> * chore(lockfile): auto update lazy-lock.json * fix(edgy): add nil check for toggleterm terminal (#1546) Fixes #1545 When toggleterm terminal has not been created yet, `require("toggleterm.terminal").get(1)` returns nil, causing an error when trying to access `term.direction`. This commit adds a nil check before accessing the direction property to prevent the error. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> * chore(lockfile): auto update lazy-lock.json * fix(treesitter): add autocmd for highlight and fix load plugin (#1547) Co-authored-by: misumisumi <s.kobayashi@misumi-sumi.com> * chore(lockfile): auto update lazy-lock.json * chore(lockfile): auto update flake.lock * chore(lockfile): auto update flake.lock * fix: using project's clang-format config first. (#1550) * fix: using project's clang-format config first. * fix: style lua ci/cd * chore(lockfile): auto update lazy-lock.json * chore(lockfile): auto update flake.lock * fix(ruff): use project config first (#1558) * Fix deprecated tree-sitter package and update codecompanion v18 (#1557) * fix(codecompanion): update to v18 * fix(settings): remove jsonc treesitter - jsonc is not available on upstream by nvim-treesitter/nvim-treesitter#8316 --------- Co-authored-by: misumisumi <s.kobayashi@misumi-sumi.com> * chore(lockfile): auto update lazy-lock.json * chore(tool.project): update `project.nvim` config (#1559) * chore(lockfile): auto update lazy-lock.json * chore(lockfile): auto update flake.lock * chore(lockfile): auto update flake.lock * chore(lockfile): auto update flake.lock * feat(keymap): add `<leader>dC` to close dapui. #1552 * chore(lockfile): auto update lazy-lock.json * chore(lockfile): auto update flake.lock * refactor: use telescope/fzf-lua to replace glance.nvim (#1519) * refactor: use telescope/fzf-lua to replace glance.nvim * fix(ci): lint code * refactor(ci): remove lint args * chore(lockfile): auto update lazy-lock.json * chore(lockfile): auto update flake.lock --------- Signed-off-by: Jint-lzxy <50296129+Jint-lzxy@users.noreply.github.com> Signed-off-by: Guennadi Maximov C <g.maxc.fox@protonmail.com> Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Charles Chiu <mail@charliie.dev> Co-authored-by: jint_lzxy_ <50296129+Jint-lzxy@users.noreply.github.com> Co-authored-by: ayamir <lgt986452565@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: wenqian <lazycat7706@gmail.com> Co-authored-by: Cloud <60375730+Cloud0310@users.noreply.github.com> Co-authored-by: MiSumiSumi <dragon511southern@gmail.com> Co-authored-by: misumisumi <s.kobayashi@misumi-sumi.com> Co-authored-by: Guennadi Maximov C <g.maxc.fox@protonmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: liuguangtian.1024 <liuguangtian.1024@bytedance.com> Co-authored-by: Zonghao Yuan <64521992+zonghaoyuan@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> Co-authored-by: ayamir <61657399+ayamir@users.noreply.github.com>


Note
See previous PR #1489 and #1172 for previous details.
Due to pyrefly is still not reached beta yet, we choose to wait its first beta release, as it doesn't have any comlicated refactor capibility for now.
The PR now is converted into a draft now, the information about pyrefly could retrived here and facebook/pyrefly#344. And this would likely to be a BREAKING CHANGE once merged.
Summary
As we are searching for a better Python LSP, and there has been updates on pyrefly as a better choice for this, which is now mature and solid, I think its time to move on for pyrefly as the default python lsp.
Details